package cn.ch.utils;

import org.springframework.stereotype.Component;

//日志切面和切点
//@Aspect
@Component
public class LogAspect {
    //自动注入当前线程的request(线程安全的)
   /* @Autowired
    private HttpServletRequest request;
    @Autowired
    private ILogService logService;
    *//**
     * 定义切点：所有打上了@SystemLog的注解的方法
     *//*
    @Pointcut("@annotation(cn.ch.basic.anno.SystemLog)")
    private void logcut() {}

    *//**
     * 定义环绕通知
     * @param point ProceedingJoinPoint 等同于 Method 作用是执行目标方法
     * @return point执行的方法的返回结果
     *//*
    @Around("logcut()")
    public Object around(ProceedingJoinPoint point){
        //定义方法的返回结果
        Object result = null;
        //定义日志对象
        Log log = new Log();
        //获取方法的信息 MethodSignature 也继承了Signature接口
        MethodSignature signature = (MethodSignature) point.getSignature();
        Method method = signature.getMethod();
        //获取方法名字
        log.setMethod(method.getDeclaringClass().getName()+"."+method.getName());
        //获取参数个数和参数的数组对象
        log.setParam("参数个数: "+method.getParameterCount()+"---"+ Arrays.toString(method.getParameters()));
        //获取注解上的描述
        SystemLog annotation = method.getAnnotation(SystemLog.class);
        if (annotation!=null)//获取方法上的注解的value值
            log.setOperation(annotation.value());
        //获取用户的ip
        log.setIp(IpAddressUtil.getIpAddress(request));
        //获取调用此方法的用户的手机账号(账户)
        log.setPhone("13311112222");
        //方法开始执行的时间
        long beginTime = System.currentTimeMillis();
        log.setCreate_time(new Date());
        //执行目标方法
        try {
            result= point.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        //得到方法执行的时间
        log.setTime((int) (System.currentTimeMillis()-beginTime));
        //日志对象封装完成 插入数据库
        logService.add(log);
        //返回方法的执行结果
        return result;
    }*/
}

